//package com.example.mytestdemo.view.view;
//
//import android.annotation.SuppressLint;
//import android.content.res.Resources;
//import android.os.Bundle;
//import android.text.TextUtils;
//import android.view.Gravity;
//import android.view.LayoutInflater;
//import android.view.View;
//import android.view.ViewGroup;
//import android.view.Window;
//import android.widget.FrameLayout;
//import android.widget.ProgressBar;
//import android.widget.TextView;
//
//import androidx.annotation.NonNull;
//import androidx.annotation.Nullable;
//import androidx.core.content.ContextCompat;
//import androidx.fragment.app.DialogFragment;
//import androidx.fragment.app.Fragment;
//import androidx.fragment.app.FragmentManager;
//import androidx.fragment.app.FragmentTransaction;
//
//
//
//public class ProgressDialog extends DialogFragment {
//
//    private static final int WIDTH = 309;
//    private static final int HEIGHT = 186;
//
//    private TextView mTitleTv;
//    private ProgressBar mProgressPb;
//    private TextView mProgressTipTv;
//    private FrameLayout mOperatorFl;
//    private TextView mCancelTv;
//    private TextView mRetryTv;
//    private View mDiverView;
//
//    private boolean mCancelable = true;
//    private View.OnClickListener mCancelListener;
//    private View.OnClickListener mRetryListener;
//    private String mCancelTabText;
//    private String mRetryTabText;
//    private String mTitleTabText;
//
//    private boolean mShowProgress = true;
//    private int mProgress = 0;
//
//    @Override
//    public void onCreate(@Nullable Bundle savedInstanceState) {
//        super.onCreate(savedInstanceState);
//        setCancelable(mCancelable);
//        setStyle(DialogFragment.STYLE_NO_TITLE, 0);
//    }
//
//    @Nullable
//    @Override
//    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//
//        View view = inflater.inflate(R.layout.update_dialog_progress, container, false);
//        mTitleTv = view.findViewById(R.id.tv_title);
//        mProgressPb = view.findViewById(R.id.pb_progress);
//        mProgressTipTv = view.findViewById(R.id.tv_progress_tip);
//        mOperatorFl = view.findViewById(R.id.fl_operator);
//        mCancelTv = view.findViewById(R.id.tv_cancel);
//        mRetryTv = view.findViewById(R.id.tv_retry);
//        mDiverView = view.findViewById(R.id.v_diver);
//        init();
//        return view;
//    }
//
//    @Override
//    public void onStart() {
//        super.onStart();
//        if (getDialog() != null) {
//            Window window = getDialog().getWindow();
//            window.setGravity(Gravity.CENTER);
//            window.setLayout(618, 372); // 设计稿是 309dp, 186dp; PX * 2
//        }
//    }
//
//
//    public void setProgress(int progress) {
//        if (mProgressPb != null) {
//            mProgressPb.setProgress(progress);
//        }
//    }
//
//
//    private void init() {
//        if (!TextUtils.isEmpty(mTitleTabText)) {
//            mTitleTv.setText(mTitleTabText);
//        }
//        if (!TextUtils.isEmpty(mCancelTabText)) {
//            mCancelTv.setText(mCancelTabText);
//        }
//        if (!TextUtils.isEmpty(mRetryTabText)) {
//            mRetryTv.setText(mRetryTabText);
//        }
//
//        if (mShowProgress) {
//            mProgressPb.setProgressDrawable(ContextCompat.getDrawable(getContext(), R.drawable.update_in_progress));
//            mProgressPb.setProgress(mProgress);
//            String format = getString(R.string.progress_in_loading);
//            mProgressTipTv.setText(String.format(format, mProgress));
//            mOperatorFl.setVisibility(View.GONE);
//        } else {
//            mProgressPb.setProgressDrawable(ContextCompat.getDrawable(getContext(), R.drawable.update_progress_failed));
//            mProgressTipTv.setText(getString(R.string.progress_failed));
//            mProgressPb.setProgress(mProgress);
//            mOperatorFl.setVisibility(View.VISIBLE);
//        }
//
//
//        mCancelTv.setOnClickListener(v -> {
//            if (mCancelListener != null) {
//                mCancelListener.onClick(v);
//            }
//            dismiss();
//        });
//
//        mRetryTv.setOnClickListener(v -> {
//            if (mRetryListener != null) {
//                mRetryListener.onClick(v);
//            }
//        });
//    }
//
//
//    @SuppressLint("StringFormatInvalid")
//    public void updateLoadingProgressTips(int progress) {
//        if (this.mProgress == progress && mShowProgress) {
//            return;
//        }
//        this.mProgress = progress;
//        this.mShowProgress = true;
//        if (mProgressPb != null && getContext() != null) {
//            mProgressPb.setProgressDrawable(ContextCompat.getDrawable(getContext(), R.drawable.update_in_progress));
//            String format = getString(R.string.progress_in_loading);
//            mProgressTipTv.setText(String.format(format, progress));
//            mProgressPb.setProgress(progress);
//            mOperatorFl.setVisibility(View.GONE);
//        }
//    }
//
//    @SuppressLint("StringFormatInvalid")
//    public void updateLoadingProgressTips() {
//        if (mShowProgress) {
//            return;
//        }
//        mShowProgress = true;
//        if (mProgressPb != null && getContext() != null) {
//            this.mProgress = mProgressPb.getProgress();
//            mProgressPb.setProgressDrawable(ContextCompat.getDrawable(getContext(), R.drawable.update_in_progress));
//            String format = getString(R.string.progress_in_loading);
//            mProgressTipTv.setText(String.format(format, mProgressPb.getProgress()));
//            mOperatorFl.setVisibility(View.GONE);
//        }
//    }
//
//    public void updateFailedProgressTips(int progress) {
//        if (this.mProgress == progress && !mShowProgress) {
//            return;
//        }
//        mShowProgress = false;
//        this.mProgress = progress;
//        if (mProgressPb != null && getContext() != null) {
//            mProgressPb.setProgressDrawable(ContextCompat.getDrawable(getContext(), R.drawable.update_progress_failed));
//            mProgressTipTv.setText(getString(R.string.progress_failed));
//            mProgressPb.setProgress(progress);
//            mOperatorFl.setVisibility(View.VISIBLE);
//        }
//    }
//
//    public void updateFailedProgressTips() {
//        if (!mShowProgress) {
//            return;
//        }
//        this.mShowProgress = false;
//        if (mProgressPb != null && getContext() != null) {
//            this.mProgress = mProgressPb.getProgress();
//            mProgressPb.setProgressDrawable(ContextCompat.getDrawable(getContext(), R.drawable.update_progress_failed));
//            mProgressTipTv.setText(getString(R.string.progress_failed));
//            mOperatorFl.setVisibility(View.VISIBLE);
//        }
//    }
//
//    private static int dp2px(final float dpValue) {
//        final float scale = Resources.getSystem().getDisplayMetrics().density;
//        return (int) (dpValue * scale + 0.5f);
//    }
//
//    @Override
//    public void dismissAllowingStateLoss() {
//        if (getFragmentManager() != null){
//            super.dismissAllowingStateLoss();
//        }
//    }
//
//    @Override
//    public void show(@NonNull FragmentManager manager, @Nullable String tag) {
//        //避免重复添加的异常 java.lang.IllegalStateException: Fragment already added
//        Fragment fragment = manager.findFragmentByTag(tag);
//        if (fragment != null) {
//            FragmentTransaction fragmentTransaction = manager.beginTransaction();
//            fragmentTransaction.remove(fragment);
//            fragmentTransaction.commitAllowingStateLoss();
//        }
//        //避免状态丢失的异常 java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
//        try {
//            super.show(manager, tag);
//        } catch (IllegalStateException e) {
//            e.printStackTrace();
//        }
//    }
//
//    public static class Builder {
//
//        private final ProgressDialog build = new ProgressDialog();
//
//        public Builder setCancelable(boolean cancelable) {
//            build.mCancelable = cancelable;
//            return this;
//        }
//
//        public Builder setCancelTabText(String cancel) {
//            build.mCancelTabText = cancel;
//            return this;
//        }
//
//        public Builder setCancelClickListener(View.OnClickListener listener) {
//            build.mCancelListener = listener;
//            return this;
//        }
//
//        public Builder setRetryClickListener(View.OnClickListener listener) {
//            build.mRetryListener = listener;
//            return this;
//        }
//
//        public Builder setRetryTabText(String retry) {
//            build.mRetryTabText = retry;
//            return this;
//        }
//
//        public Builder setTitleText(String title) {
//            build.mTitleTabText = title;
//            return this;
//        }
//
//
//        public ProgressDialog build() {
//            return build;
//        }
//    }
//}
